package com.weipu.common.facade;

import java.util.ArrayList;

import com.weipu.common.facade.exception.DxException;
import com.weipu.common.facade.model.Lines;
import com.weipu.common.facade.model.PreviewOrderModel;

/**
 * @author Tony
 * 购物车与服务端进行同步的服务接口封装
 */
public interface ShoppingCartServiceProvider {
	
	/**
	 * 描述：获取服务端的购物车列表
	 * @param customID 用户唯一标识ID
	 * @param notSelectedSkuStr
	 * @throws DxException
	 * @return 返回存储在服务端的购物车商品列表
	 */
	public PreviewOrderModel getCart(long customerId, String token, String notSelectedSkuStr)
			throws DxException;
	
	/**
	 * 描述：向购物车中添加商品(覆盖)
	 * @param sku 商品标识
	 * @param quantity 商品数量
	 * @param customID 用户ID
	 * @return 返回添加之后购物车中存在的品类数量，如果返回-1 标识添加失败
	 */
	public PreviewOrderModel updateCart(int sku,int quantity,long customerId,String token)
			throws DxException;
	
	/**
	 * 描述：清空购物车
	 * @param customID 用户ID
	 * @throws DxException
	 */
	public void clearCart(long customerId,String token)
			throws DxException;
	
	/**
	 * 描述：购物车中根据产品ID移除某一个产品
	 * @param customID 用户ID
	 * @param sku 商品标识
	 * @param notSelectedSkuStr
	 * @throws DxException
	 */
	public PreviewOrderModel removeSkuFromCart(int sku, long customerId, String token, String notSelectedSkuStr)
			throws DxException;
	
	/**
	 * 描述：获取购物车Sku总品类数量
	 * @param customID 用户ID
	 */
	public int getCartCount(long customerId,String token) 
			throws DxException;
	/**
	 * 描述：添加产品到购物车（累加版）
	 * @param customID 用户ID
	 * @param sku 商品标识
	 * @param qty 商品数量
	 * @param notSelectedSkuStr
	 * @return 返回购物车中商品信息对象
	 */
	public PreviewOrderModel addCart(int sku, int qty, long customerId, String token, String notSelectedSkuStr)
			throws DxException;
	/**
	 * 描述：批量上传产品到购物车
	 * @param customID 用户ID
	 * @param skus 需要同步的商品列表 （SKU、QTY）
	 * @return 返回购物车中商品信息对象
	 */
	public PreviewOrderModel uploadLocalCart(ArrayList<Lines> skus,long customerId,String token) 
			throws DxException;
}
